

/*消息模块功能测试*/
#include "../mqserver/mq_message.hpp"
#include <gtest/gtest.h>

const std::string basedir = "./data/message/";
xgmq::MessageManager::ptr mmp;

// 编写全局测试套件
class MessageTest : public testing::Environment
{
public:
    void SetUp() override
    {
        // 初始化环境
        mmp = std::make_shared<xgmq::MessageManager>(basedir);
        mmp->initQueueMessage("queue1");
    }
    void TearDown() override
    {
        // 清理环境
        // mmp->clear();
    }
};

// 新增消息的测试
TEST(message_test, insert_test)
{
    xgmq::basicProperties bp;
    bp.set_id(xgmq::UUIDHelper::uuid());
    bp.set_routing_key("加油加油");
    bp.set_deliver_mode(xgmq::DeliveryMode::DURABLE);

    mmp->insert("queue1", &bp, "hello-world-1", xgmq::DeliveryMode::DURABLE);
    mmp->insert("queue1", nullptr, "hello-world-2", xgmq::DeliveryMode::DURABLE);
    mmp->insert("queue1", nullptr, "hello-world-3", xgmq::DeliveryMode::DURABLE);
    mmp->insert("queue1", nullptr, "hello-world-4", xgmq::DeliveryMode::DURABLE);
    mmp->insert("queue1", nullptr, "hello-world-5", xgmq::DeliveryMode::UNDURABLE);

    ASSERT_EQ(mmp->get_total_count("queue1"), 4);
}
// 删除消息的测试
TEST(message_test, delete_test)
{
    ASSERT_EQ(mmp->get_total_count("queue1"), 4);
    xgmq::MessagePtr msg1 = mmp->front("queue1");
    ASSERT_NE(msg1.get(), nullptr);
    ASSERT_EQ(msg1->payload().body(), std::string("hello-world-1"));
    ASSERT_EQ(mmp->waitsend_count("queue1"), 4);//待推送消息数量
    ASSERT_EQ(mmp->waitack_count("queue1"), 1);//待确认消息数量

    // 对这条消息进行确认
    mmp->ack("queue1", msg1->payload().properties().id());
    ASSERT_EQ(mmp->waitsend_count("queue1"), 4);//待推送消息数量
    ASSERT_EQ(mmp->waitack_count("queue1"), 0);//待确认消息数量
    ASSERT_EQ(mmp->durable_count("queue1"),3);//持久化消息数量
}
//销毁消息测试
TEST(message_test, destory_test)
{
    mmp->destoryQueueMessage("queue1");
}
// // 获取消息的测试
// TEST(message_test, select_test)
// {
//     xgmq::MessagePtr mp1 = mmp->front("queue1");
//     ASSERT_EQ(mp1->payload().body(), std::string("hello-world-1"));
//     ASSERT_EQ(mmp->waitsend_count("queue1"), 4); // 待推送消息数量
//     ASSERT_EQ(mmp->waitack_count("queue1"), 1);  // 待确认消息数量

//     xgmq::MessagePtr mp2 = mmp->front("queue1");
//     ASSERT_EQ(mp2->payload().body(), std::string("hello-world-2"));
//     ASSERT_EQ(mmp->waitsend_count("queue1"), 3); // 待推送消息数量
//     ASSERT_EQ(mmp->waitack_count("queue1"), 2);  // 待确认消息数量

//     xgmq::MessagePtr mp3 = mmp->front("queue1");
//     ASSERT_EQ(mp3->payload().body(), std::string("hello-world-3"));
//     ASSERT_EQ(mmp->waitsend_count("queue1"), 2); // 待推送消息数量
//     ASSERT_EQ(mmp->waitack_count("queue1"), 3);  // 待确认消息数量

//     xgmq::MessagePtr mp4 = mmp->front("queue1");
//     ASSERT_EQ(mp4->payload().body(), std::string("hello-world-4"));
//     ASSERT_EQ(mmp->waitsend_count("queue1"), 1); // 待推送消息数量
//     ASSERT_EQ(mmp->waitack_count("queue1"), 4);  // 待确认消息数量

//     xgmq::MessagePtr mp5 = mmp->front("queue1");
//     ASSERT_EQ(mp5->payload().body(), std::string("hello-world-5"));
//     ASSERT_EQ(mmp->waitsend_count("queue1"), 0); // 待推送消息数量
//     ASSERT_EQ(mmp->waitack_count("queue1"), 5);  // 待确认消息数量
// }

// xgmq::MessageManager::ptr mmp1;
// // 编写全局测试套件
// class MessageTest2 : public testing::Environment
// {
// public:
//     void SetUp() override
//     {
//         // 初始化环境
//         mmp1 = std::make_shared<xgmq::MessageManager>(basedir);
//     }
//     void TearDown() override
//     {
//         // 清理环境
//         // mmp1->clear();
//     }
// };
// // 恢复消息的测试
// TEST(message_test2, recovery_test)
// {
//     mmp1->initQueueMessage("queue1");
//     ASSERT_EQ(mmp1->get_total_count("queue1"), 4);
//     xgmq::MessagePtr msg1 = mmp1->front("queue1");
//     ASSERT_EQ(msg1->payload().body(), std::string("hello-world-1"));
//     ASSERT_EQ(mmp1->waitsend_count("queue1"), 3); // 待推送消息数量
//     ASSERT_EQ(mmp1->waitack_count("queue1"), 1);  // 待确认消息数量

//     xgmq::MessagePtr mp2 = mmp1->front("queue1");
//     ASSERT_EQ(mp2->payload().body(), std::string("hello-world-2"));
//     ASSERT_EQ(mmp1->waitsend_count("queue1"), 2); // 待推送消息数量
//     ASSERT_EQ(mmp1->waitack_count("queue1"), 2);  // 待确认消息数量

//     xgmq::MessagePtr mp3 = mmp1->front("queue1");
//     ASSERT_EQ(mp3->payload().body(), std::string("hello-world-3"));
//     ASSERT_EQ(mmp1->waitsend_count("queue1"), 1); // 待推送消息数量
//     ASSERT_EQ(mmp1->waitack_count("queue1"), 3);  // 待确认消息数量

//     xgmq::MessagePtr mp4 = mmp1->front("queue1");
//     ASSERT_EQ(mp4->payload().body(), std::string("hello-world-4"));
//     ASSERT_EQ(mmp1->waitsend_count("queue1"), 0); // 待推送消息数量
//     ASSERT_EQ(mmp1->waitack_count("queue1"), 4);  // 待确认消息数量

//     xgmq::MessagePtr mp5 = mmp1->front("queue1");
//     ASSERT_EQ(mp5.get(),nullptr);
// }

int main(int argc, char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    // 添加全局测试套件
    testing::AddGlobalTestEnvironment(new MessageTest);
    // testing::AddGlobalTestEnvironment(new MessageTest2);
    int ret = RUN_ALL_TESTS();

    return 0;
}
